Introduction

Main focus of this side project is to find phase-transition which happen when we are changing boundary/Acceptability of different opinion and Narrowness of identity group. Result should be a simple graph showing how ESBG polarization changes with change of Acceptability of different opinion and Narrowness of identity group.

Note: Experiment is still running, we are at 26 complete sets of all values combinations out of 120. Also note, that it seems that we are not done yet, we probably will need more sets than 120 and more values of Narrowness of identity group.

Processing raw data files

Loading data

Data are at http://github.com/frantisek901/Spirals/Experiment. Experiment is still running and I, FranČesko, from time to time actualize the *.csv files at GitHub, then I run script experiment.R which loads the data. Now, 2022-03-25, we are at 20 %, roughly. Who is not interested in working with megabytes of *.csv files, might use compiled phase2w.RData.

Now we load and aggregate these data and factorize and rename selected variables:

## Loading stored data
load("phase2w.RData")


## Preparing individual data 'dfi'
dfi = phase2w %>% 
  ## Filtering variables:
  filter(RS <= 11, identity) %>%  #  | (RS >= 61 & RS <= 96),  
  ## Denormalizing ESBG:
  mutate(ESBG = ESBG * sqrt(opinions))


## Summarising 'dfi' into 'dfs':
dfs = dfi %>% 
  group_by(opinions, boundary, identity, id_threshold) %>% 
  summarise(ESBG = mean(ESBG)) %>% ungroup() %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:4, c("Opinion dimensions:", "Acceptability of different opinion:", "Identity:", 
                    "Narrowness of identity group:"))

NOTE:

I de-normalized ESBG, i.e. I multiply. I just noticed that systematically ESBG is lower and also much denser in higher dimensions. I have also substantive/philosophical reasons for this de-normalization, now I will try it and describe the reasons for de-normalization later in detail. But just briefly:

I think that agents do not know in how many dimensions they are and what is the maximum posible distance, they feel polarisation reegarding the other group not regarding the group and the possible maxima of distance, let’s do following thought experiment:

Our agents living in 1D, they discuss just one topic, they are divided in two camps of equal size and these two camps are at the poles -1 and +1 of their opinion space, the polarization is maximal, ESBG is 1. Then we take this strange world on a string and put it on the table, now they are in 2D world, their distance is same since the don’t change it, they should stil feel polarization of margin ESBG=1 since nothing changed. Then we recognize that table is in the roomm – 3D, then we rocignize time – 4D… But polarization should be still same, since these agent don’t change their positions.

So, this was the argument :-) and now let’s look, how results change after de-normalization of ESBG…

GREAT! Results look GREAT! Now the polarization is more ballanced over dimensions, but still, even after de-normalization, holds true that the more dimensions the less polarization.

Graphs

Now, let’s show our results graphically!

Color maps

Smaller maps, one by one

dfs %>% 
  ggplot() +
  aes(x = `Acceptability of different opinion:`, col = ESBG, fill = ESBG,
      y = `Narrowness of identity group:`) +
  facet_wrap(vars(`Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 1, size = 1.75, shape = 22) +
  scale_fill_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_y_continuous(breaks = seq(0.05, 0.85, 0.05)) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4), 'Narrowness of identity group' (0.05--0.85) and\n'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions") +
  guides(alpha = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

  1. I love these pictures! Whole my life I’d like to produce something meaningful looking like this – and here I am!
  2. the more dimensions the less polarization,
  3. the least polarized region is quarter of circle in the right bottom corner, then the left-hand side stripe, and the most polarized is the resting region (the most polarized part of this region seems to move with change of dimensions, but may be it is the artifact of low number of simulations – sometimes it is upper-right corner, sometimes upper border, sometimes right border)

Detailed maps: one after one

Just for a try, same map, but more detailed and with panels organized in column insted of in a row:

dfs %>% 
  ggplot() +
  aes(x = `Acceptability of different opinion:`, fill = ESBG, col = ESBG, label = round(100*ESBG, 0),
      y = `Narrowness of identity group:`) +
  facet_wrap(vars(`Opinion dimensions:`), ncol=1) +
  geom_point(alpha = 1, size = 6.6, shape = 22) +
  geom_text(color = "white", size = 2) +
  scale_fill_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_y_continuous(breaks = seq(0.05, 0.85, 0.05), labels = seq(0.05, 0.85, 0.05)) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05), labels = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4), 'Narrowness of identity group' (0.05--0.85) and\n'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", 
       caption = "Note: Numbers indicate polarization, they are equal to `round(100 * ESBG, 0)`.") +
  guides(alpha = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Pulped clouds

For the first graph on pulped clouds we aggregate Acceptability of different opinion into 13 categories (we just round 121 original values to 2 digits). Two different levels of polarization are seeable here, but it doesn’t look like clouds…

Acceptability: reduced boxplot

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * id_threshold, 0) %in% seq(5, 85, 10)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(x = `Acceptability of different opinion:`, y = ESBG, 
      fill = `Narrowness of identity group:`,
      col = `Narrowness of identity group:`, 
      group = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Acceptability: full boxplot

Now same graph, but with every value:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(20000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  
  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
 
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(x = `Acceptability of different opinion:`, y = ESBG, 
      fill = `Narrowness of identity group:`,
      col = `Narrowness of identity group:`, 
      group = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Acceptability: reduced scatter plot

Now, same data but slightly different graph

## For presenting variability we try now scatter plot only on individual data (non-aggregated):
dfi %>%
  filter(round(100 * id_threshold, 0) %in% seq(5, 85, 10)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(x = `Acceptability of different opinion:`, y = ESBG, 
             fill = `Narrowness of identity group:`,
             col = `Narrowness of identity group:`, 
             group = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Acceptability: full scatter plot

## For presenting variability we try now scatter plot on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>%  
  
  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(x = `Acceptability of different opinion:`, y = ESBG, 
             fill = `Narrowness of identity group:`,
             col = `Narrowness of identity group:`, 
             group = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.35--0.6) and 'Average acceptability of different opinions' (0.05--0.3)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Pulped clouds: Exchanging Acceptability and Narrowness

For this set of graph we flip the perspective – we set Acceptability of different opinion as slicing variable, associated with color/fill, on the X axis we assign Narrowness of identity group. Let’s hope, it helps understand the 2-way phase transition better.

Narrownes: reduced boxplot

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * boundary, 1) %in% seq(5, 50, 5)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(fill = `Acceptability of different opinion:`, y = ESBG, 
      x = `Narrowness of identity group:`,
      group = `Narrowness of identity group:`,
      col = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.850, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Narrownes: full boxplot

Now same graph, but with every value:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(fill = `Acceptability of different opinion:`, y = ESBG, 
      x = `Narrowness of identity group:`,
      group = `Narrowness of identity group:`, 
      col = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Narrownes: reduced scatter plot

Now, same data but slightly different graph

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * boundary, 0) %in% seq(5, 50, 5)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(fill = `Acceptability of different opinion:`, y = ESBG, 
             x = `Narrowness of identity group:`,
             col = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Narrownes: full scatter plot

Now, same graph again with complete data:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(fill = `Acceptability of different opinion:`, y = ESBG, 
             x = `Narrowness of identity group:`,
             col = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Regression

m = lm(ESBG ~ factor(opinions)+id_threshold+boundary, data = filter(dfi, identity))
ms = summary(m)

p1 = lm(ESBG ~ factor(opinions)+factor(id_threshold)+factor(boundary), data = filter(dfi, identity))
p1s = summary(p1)
p1s
## 
## Call:
## lm(formula = ESBG ~ factor(opinions) + factor(id_threshold) + 
##     factor(boundary), data = filter(dfi, identity))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.45918 -0.08119 -0.00833  0.06189  0.51675 
## 
## Coefficients:
##                            Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)               0.1942350  0.0039951   48.619  < 2e-16 ***
## factor(opinions)2        -0.0753114  0.0008555  -88.031  < 2e-16 ***
## factor(opinions)4        -0.1073011  0.0008619 -124.493  < 2e-16 ***
## factor(id_threshold)0.06  0.0005526  0.0045136    0.122  0.90255    
## factor(id_threshold)0.07  0.0003330  0.0045136    0.074  0.94120    
## factor(id_threshold)0.08  0.0001491  0.0045136    0.033  0.97366    
## factor(id_threshold)0.09  0.0011120  0.0045136    0.246  0.80540    
## factor(id_threshold)0.1   0.0011587  0.0045136    0.257  0.79740    
## factor(id_threshold)0.11  0.0013808  0.0045136    0.306  0.75966    
## factor(id_threshold)0.12  0.0030909  0.0045136    0.685  0.49348    
## factor(id_threshold)0.13  0.0027608  0.0045136    0.612  0.54077    
## factor(id_threshold)0.14  0.0034173  0.0045136    0.757  0.44898    
## factor(id_threshold)0.15  0.0043778  0.0045136    0.970  0.33210    
## factor(id_threshold)0.16  0.0038268  0.0045136    0.848  0.39654    
## factor(id_threshold)0.17  0.0043284  0.0045136    0.959  0.33758    
## factor(id_threshold)0.18  0.0042062  0.0045136    0.932  0.35140    
## factor(id_threshold)0.19  0.0051635  0.0045136    1.144  0.25263    
## factor(id_threshold)0.2   0.0047169  0.0045136    1.045  0.29601    
## factor(id_threshold)0.21  0.0064602  0.0045136    1.431  0.15236    
## factor(id_threshold)0.22  0.0057253  0.0045136    1.268  0.20464    
## factor(id_threshold)0.23  0.0041317  0.0045136    0.915  0.35999    
## factor(id_threshold)0.24  0.0066786  0.0045502    1.468  0.14217    
## factor(id_threshold)0.25  0.0100043  0.0045502    2.199  0.02790 *  
## factor(id_threshold)0.26  0.0070092  0.0045502    1.540  0.12346    
## factor(id_threshold)0.27  0.0092449  0.0045502    2.032  0.04218 *  
## factor(id_threshold)0.28  0.0101585  0.0045502    2.233  0.02558 *  
## factor(id_threshold)0.29  0.0146493  0.0045502    3.220  0.00128 ** 
## factor(id_threshold)0.3   0.0219920  0.0045502    4.833 1.34e-06 ***
## factor(id_threshold)0.31  0.0274499  0.0045502    6.033 1.62e-09 ***
## factor(id_threshold)0.32  0.0358669  0.0045502    7.883 3.23e-15 ***
## factor(id_threshold)0.33  0.0477513  0.0045502   10.494  < 2e-16 ***
## factor(id_threshold)0.34  0.0516544  0.0045510   11.350  < 2e-16 ***
## factor(id_threshold)0.35  0.0513852  0.0044726   11.489  < 2e-16 ***
## factor(id_threshold)0.36  0.0593802  0.0044726   13.276  < 2e-16 ***
## factor(id_threshold)0.37  0.0663612  0.0044726   14.837  < 2e-16 ***
## factor(id_threshold)0.38  0.0704780  0.0044726   15.758  < 2e-16 ***
## factor(id_threshold)0.39  0.0830999  0.0044726   18.580  < 2e-16 ***
## factor(id_threshold)0.4   0.0932782  0.0044726   20.855  < 2e-16 ***
## factor(id_threshold)0.41  0.1135359  0.0044726   25.385  < 2e-16 ***
## factor(id_threshold)0.42  0.1268925  0.0044726   28.371  < 2e-16 ***
## factor(id_threshold)0.43  0.1416905  0.0044726   31.680  < 2e-16 ***
## factor(id_threshold)0.44  0.1493681  0.0044726   33.396  < 2e-16 ***
## factor(id_threshold)0.45  0.1654600  0.0044726   36.994  < 2e-16 ***
## factor(id_threshold)0.46  0.1717689  0.0044726   38.405  < 2e-16 ***
## factor(id_threshold)0.47  0.1898572  0.0044726   42.449  < 2e-16 ***
## factor(id_threshold)0.48  0.2071021  0.0044726   46.304  < 2e-16 ***
## factor(id_threshold)0.49  0.2114721  0.0044726   47.282  < 2e-16 ***
## factor(id_threshold)0.5   0.2264104  0.0044726   50.621  < 2e-16 ***
## factor(id_threshold)0.51  0.2381351  0.0044726   53.243  < 2e-16 ***
## factor(id_threshold)0.52  0.2424008  0.0044726   54.197  < 2e-16 ***
## factor(id_threshold)0.53  0.2479825  0.0044726   55.445  < 2e-16 ***
## factor(id_threshold)0.54  0.2506168  0.0044726   56.034  < 2e-16 ***
## factor(id_threshold)0.55  0.2504702  0.0044726   56.001  < 2e-16 ***
## factor(id_threshold)0.56  0.2537994  0.0044726   56.745  < 2e-16 ***
## factor(id_threshold)0.57  0.2498201  0.0044726   55.855  < 2e-16 ***
## factor(id_threshold)0.58  0.2486547  0.0044726   55.595  < 2e-16 ***
## factor(id_threshold)0.59  0.2468847  0.0044726   55.199  < 2e-16 ***
## factor(id_threshold)0.6   0.2429014  0.0044726   54.309  < 2e-16 ***
## factor(id_threshold)0.61  0.2402417  0.0044726   53.714  < 2e-16 ***
## factor(id_threshold)0.62  0.2383386  0.0044726   53.288  < 2e-16 ***
## factor(id_threshold)0.63  0.2368024  0.0044726   52.945  < 2e-16 ***
## factor(id_threshold)0.64  0.2373794  0.0044726   53.074  < 2e-16 ***
## factor(id_threshold)0.65  0.2352303  0.0044726   52.593  < 2e-16 ***
## factor(id_threshold)0.66  0.2326833  0.0044726   52.024  < 2e-16 ***
## factor(id_threshold)0.67  0.2300422  0.0044726   51.433  < 2e-16 ***
## factor(id_threshold)0.68  0.2221115  0.0044726   49.660  < 2e-16 ***
## factor(id_threshold)0.69  0.2176165  0.0044726   48.655  < 2e-16 ***
## factor(id_threshold)0.7   0.2129373  0.0044726   47.609  < 2e-16 ***
## factor(id_threshold)0.71  0.2016174  0.0044726   45.078  < 2e-16 ***
## factor(id_threshold)0.72  0.1890247  0.0044726   42.263  < 2e-16 ***
## factor(id_threshold)0.73  0.1805768  0.0044726   40.374  < 2e-16 ***
## factor(id_threshold)0.74  0.1602298  0.0044726   35.825  < 2e-16 ***
## factor(id_threshold)0.75  0.1596770  0.0044726   35.701  < 2e-16 ***
## factor(id_threshold)0.76  0.1488276  0.0044726   33.275  < 2e-16 ***
## factor(id_threshold)0.77  0.1472232  0.0044726   32.917  < 2e-16 ***
## factor(id_threshold)0.78  0.1445962  0.0044726   32.329  < 2e-16 ***
## factor(id_threshold)0.79  0.1449372  0.0044726   32.405  < 2e-16 ***
## factor(id_threshold)0.8   0.1441985  0.0044726   32.240  < 2e-16 ***
## factor(id_threshold)0.81  0.1403423  0.0044726   31.378  < 2e-16 ***
## factor(id_threshold)0.82  0.1415225  0.0044726   31.642  < 2e-16 ***
## factor(id_threshold)0.83  0.1452707  0.0044726   32.480  < 2e-16 ***
## factor(id_threshold)0.84  0.1464215  0.0044726   32.737  < 2e-16 ***
## factor(id_threshold)0.85  0.1476656  0.0044726   33.015  < 2e-16 ***
## factor(boundary)0.06      0.0013868  0.0033652    0.412  0.68025    
## factor(boundary)0.07      0.0086944  0.0033652    2.584  0.00978 ** 
## factor(boundary)0.08      0.0085796  0.0033652    2.550  0.01079 *  
## factor(boundary)0.09      0.0092910  0.0033652    2.761  0.00576 ** 
## factor(boundary)0.1       0.0171671  0.0033652    5.101 3.38e-07 ***
## factor(boundary)0.11      0.0283348  0.0033652    8.420  < 2e-16 ***
## factor(boundary)0.12      0.0323687  0.0033652    9.619  < 2e-16 ***
## factor(boundary)0.13      0.0363602  0.0033652   10.805  < 2e-16 ***
## factor(boundary)0.14      0.0327631  0.0033652    9.736  < 2e-16 ***
## factor(boundary)0.15      0.0287367  0.0033652    8.539  < 2e-16 ***
## factor(boundary)0.16      0.0191231  0.0033652    5.683 1.33e-08 ***
## factor(boundary)0.17      0.0087811  0.0033652    2.609  0.00907 ** 
## factor(boundary)0.18      0.0049373  0.0033652    1.467  0.14233    
## factor(boundary)0.19     -0.0004213  0.0033652   -0.125  0.90036    
## factor(boundary)0.2      -0.0047817  0.0033652   -1.421  0.15533    
## factor(boundary)0.21     -0.0061562  0.0033652   -1.829  0.06734 .  
## factor(boundary)0.22     -0.0106733  0.0033652   -3.172  0.00152 ** 
## factor(boundary)0.23     -0.0172469  0.0033652   -5.125 2.98e-07 ***
## factor(boundary)0.24     -0.0253975  0.0033652   -7.547 4.48e-14 ***
## factor(boundary)0.25     -0.0263868  0.0033652   -7.841 4.50e-15 ***
## factor(boundary)0.26     -0.0335364  0.0033652   -9.966  < 2e-16 ***
## factor(boundary)0.27     -0.0360049  0.0033652  -10.699  < 2e-16 ***
## factor(boundary)0.28     -0.0401761  0.0033652  -11.939  < 2e-16 ***
## factor(boundary)0.29     -0.0457398  0.0033652  -13.592  < 2e-16 ***
## factor(boundary)0.3      -0.0472374  0.0033652  -14.037  < 2e-16 ***
## factor(boundary)0.31     -0.0492508  0.0033652  -14.635  < 2e-16 ***
## factor(boundary)0.32     -0.0524317  0.0033652  -15.581  < 2e-16 ***
## factor(boundary)0.33     -0.0522022  0.0033652  -15.513  < 2e-16 ***
## factor(boundary)0.34     -0.0541577  0.0033652  -16.094  < 2e-16 ***
## factor(boundary)0.35     -0.0538189  0.0033652  -15.993  < 2e-16 ***
## factor(boundary)0.36     -0.0559849  0.0033652  -16.637  < 2e-16 ***
## factor(boundary)0.37     -0.0571275  0.0033652  -16.976  < 2e-16 ***
## factor(boundary)0.38     -0.0569144  0.0033652  -16.913  < 2e-16 ***
## factor(boundary)0.39     -0.0581788  0.0033652  -17.289  < 2e-16 ***
## factor(boundary)0.4      -0.0591914  0.0033652  -17.589  < 2e-16 ***
## factor(boundary)0.41     -0.0591300  0.0033655  -17.570  < 2e-16 ***
## factor(boundary)0.42     -0.0615367  0.0033749  -18.234  < 2e-16 ***
## factor(boundary)0.43     -0.0654015  0.0033749  -19.379  < 2e-16 ***
## factor(boundary)0.44     -0.0635344  0.0033749  -18.826  < 2e-16 ***
## factor(boundary)0.45     -0.0634280  0.0033749  -18.794  < 2e-16 ***
## factor(boundary)0.46     -0.0659656  0.0033749  -19.546  < 2e-16 ***
## factor(boundary)0.47     -0.0665964  0.0033749  -19.733  < 2e-16 ***
## factor(boundary)0.48     -0.0660789  0.0033749  -19.580  < 2e-16 ***
## factor(boundary)0.49     -0.0682801  0.0033749  -20.232  < 2e-16 ***
## factor(boundary)0.5      -0.0682074  0.0033749  -20.210  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1221 on 120673 degrees of freedom
## Multiple R-squared:  0.4467, Adjusted R-squared:  0.4461 
## F-statistic:   767 on 127 and 120673 DF,  p-value: < 2.2e-16
# f = lm(ESBG ~ factor(opinions)*factor(id_threshold)*factor(boundary), data = filter(dfi, identity))
# fs = summary(f)

I just wanna know how much variability we can explain by the full model. But I am not able to estimate the full model, since with fully factorized variables there are 11 177 (!sic) variables and interactions. Dataset is rich enough for this, but memory of my PC is not :-) Later we might try estimate the explanation by full model on Unity. But preliminary estimate shows that we pay more than 10,000 degrees of freedom by including all the interactions, but we get something around of 2 more percent points of variability explained – it totally doesn’t worth for such a high price!

OK, by fully factorized main effects only model we might explain 44.7 %, it means there is 55.3 % of variability, which is unexplainable in principle! Resp. we can’t explain it by any variable which we manipulated during simulation experiments. As I mentioned above, we might try explain it via detailed description of initial condition (however randomly generated) or via description of the course of the simulation.

BTW, fully factorized model with main effects only is the best (difference in BIC -24k), this model is better regarding the BIC than the non-factorized main effects model. Just for order, the model with non-factorized main effects explains 31.6 % of variability.